package com.itany.corejava.code09_异常;

/**
 * @author MissChen
 * @date 2024年03月07日 16:47
 */

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 定义一个用户类User，有以下属性:id、username、password、phone、address
 * 通过控制台输入的方式实现以下方法
 * 根据以下说明，所有不符合要求的场景都设计成自定义异常
 * 提示用户欢迎来到用户管理系统
 * 请选择(1.注册 2.登录 3.修改密码 4.退出)
 * 1.注册，注册用户名时用户名不能重复，注册时密码需要输入2次，两次的密码必须一致
 * 2.登录，根据用户名与密码进行登录，登录的用户必须是注册过的用户，登录成功返回:欢迎您，XX用户
 * 3.修改密码，控制台输入一个需要修改密码的用户名，修改指定用户的密码
 * 修改密码时指定的用户必须存在
 * 修改密码时需要输入原密码，原密码正确才能修改
 * 修改密码时输入的两次新密码必须一致
 */
public class Test08_练习 {
    static Scanner sc = new Scanner(System.in);
    static List<User> users = new ArrayList<>();

    public static void main(String[] args) {
        showMenu();
    }

    public static void showMenu() {
        System.out.println("-------欢迎来到用户管理系统-------");
        System.out.print("请选择(1.注册 2.登录 3.修改密码 4.退出)");
        int choice = sc.nextInt();
        switch (choice) {
            case 1:

                try {
                    register();
                    System.out.println("注册成功");
                } catch (UserExistException e) {
                    System.out.println("对不起，注册失败，失败原因是:"+e.getMessage());
                } catch (PasswordErrorException e) {
                    System.out.println("对不起，注册失败，失败原因是:"+e.getMessage());
                }finally {
                    showMenu();
                }
                break;

            case 2:
                try {
                    User user=login();
                    System.out.println("欢迎您:"+user.getUsername());
                } catch (UserNotExistException e) {
                    System.out.println("对不起，登录失败，失败原因是:"+e.getMessage());
                }finally {
                    showMenu();
                }
                break;
            case 3:
                try {
                    modifyPassword();
                    System.out.println("恭喜您,修改密码成功");
                } catch (UserNotExistException e) {
                    System.out.println("对不起，密码修改失败，失败原因:"+e.getMessage());
                } catch (PasswordErrorException e) {
                    System.out.println("对不起，密码修改失败，失败原因:"+e.getMessage());
                } finally {
                    showMenu();
                }
                break;
            case 4:
                break;
            default:
                System.out.println("您输入的选项有误，请重新输入");
                showMenu();
                break;


        }
    }

    /**
     * 注册
     * @throws UserExistException
     * @throws PasswordErrorException
     */
    private static void register() throws UserExistException, PasswordErrorException {
        User user = new User();
        System.out.print("请输入用户名:");
        String username = sc.next();
        User u = findByUsername(username);
        if (u != null) {
            throw new UserExistException("该用户已经存被注册");
        }
        user.setUsername(username);
        System.out.print("请输入密码:");
        String password = sc.next();
        System.out.print("请再次输入密码:");
        String password2 = sc.next();
        if (!password.equals(password2)) {
            throw new PasswordErrorException("两次输入的密码不一致");
        }
        user.setPassword(password);
        System.out.print("请输入手机号:");
        user.setPhone(sc.next());
        System.out.print("请输入地址:");
        user.setAddress(sc.next());

        //将用户添加到集合中
        users.add(user);


    }

    public static User findByUsername(String username) {
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                return user;
            }
        }
        return null;
    }
    public static User login() throws UserNotExistException {
        System.out.print("请输入用户名:");
        String username = sc.next();
        System.out.print("请输入密码:");
        String password = sc.next();
        for(User user:users){
            if(user.getUsername().equals(username)&& user.getPassword().equals(password)){
                return user;
            }
        }
        throw new UserNotExistException("用户名或者密码错误");

    }

    public static void modifyPassword() throws UserNotExistException, PasswordErrorException {
        System.out.print("请输入需要修改的用户的用户名:");
        String username=sc.next();
        //判断用户是否存在
        User user=findByUsername(username);
        if(user==null){
            throw new UserNotExistException("该用户不存在");
        }
        System.out.print("请输入原密码:");
        String oldPassword=sc.next();
        if(!user.getPassword().equals(oldPassword)){
            throw new PasswordErrorException("原密码输入错误");
        }
        System.out.print("请输入新密码:");
        String newPassword=sc.next();
        System.out.print("请再次输入新密码:");
        String newPassword2=sc.next();
        if(!newPassword.equals(newPassword2)){
            throw new PasswordErrorException("两次输入的密码不一致哦!");
        }
        user.setPassword(newPassword);
    }






}
